home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 May / EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso / earcd / misc / emu / arosdev.lha / AROS / rom / exec / memory.h < prev    next >
C/C++ Source or Header  |  1997-01-09  |  2KB  |  71 lines

  1. /*
  2.     (C) 1995-96 AROS - The Amiga Replacement OS
  3.     $Id: memory.h,v 1.4 1996/10/23 14:26:58 aros Exp $
  4.     $Log: memory.h,v $
  5.     Revision 1.4  1996/10/23 14:26:58  aros
  6.     Renamed AROS macros from XYZ to AROS_XYZ, so we know what they are
  7.  
  8.     Use only roundup macro for 256 bytes (not for 2^32)
  9.  
  10.     Use AROS_WORSTALIGN instead of DOUBLEALIGN
  11.  
  12.     Revision 1.3  1996/10/19 17:11:07  aros
  13.     Moved ALLOCVEC_TOTAL to machine.h because it's used many times.
  14.  
  15.     Revision 1.2  1996/08/01 17:41:27  digulla
  16.     Added standard header for all files
  17.  
  18.     Desc:
  19.     Lang:
  20. */
  21. #ifndef _MEMORY_H_
  22. #define _MEMORY_H_
  23. #include <exec/lists.h>
  24. #include <stddef.h>
  25.  
  26. #define RTPOTx4(a)      ((a)>2?4:(a)>1?2:1)
  27.  
  28. #define RTPOTx10(a)     ((a)>=4?RTPOTx4(((a)+3)/4)*4:RTPOTx4(a))
  29.  
  30. #define RTPOTx100(a)    \
  31. ((a)>=0x10?RTPOTx10(((a)+0xf)/0x10)*0x10:RTPOTx10(a))
  32.  
  33. #define RTPOTx10000(a)  \
  34. ((a)>=0x100?RTPOTx100(((a)+0xff)/0x100)*0x100:RTPOTx100(a))
  35.  
  36. #define RTPOTx100000000(a)      \
  37. ((a)>=0x10000?RTPOTx10000(((a)+0xffff)/0x10000)*0x10000:RTPOTx10000(a))
  38.  
  39. #define ROUNDUP_TO_POWER_OF_TWO(a)      RTPOTx100(a)
  40.  
  41. /* Some defines for the memory handling functions. */
  42.  
  43. /* This is for the alignment of memchunk structures. */
  44. #define MEMCHUNK_TOTAL    \
  45. ROUNDUP_TO_POWER_OF_TWO(AROS_WORSTALIGN>sizeof(struct MemChunk)? \
  46. AROS_WORSTALIGN:sizeof(struct MemChunk))
  47.  
  48. /* This allows to take the end of the MemHeader as the first MemChunk. */
  49. #define MEMHEADER_TOTAL \
  50. ((sizeof(struct MemHeader)+MEMCHUNK_TOTAL-1)&~(MEMCHUNK_TOTAL-1))
  51.  
  52. struct Pool /* Private Pool structure */
  53. {
  54.     struct MinList PuddleList;
  55.     struct MinList BlockList;
  56.     ULONG Requirements;
  57.     ULONG PuddleSize;
  58.     ULONG ThreshSize;
  59. };
  60.  
  61. struct Block
  62. {
  63.     struct MinNode Node;
  64.     ULONG Size;
  65. };
  66.  
  67. #define BLOCK_TOTAL \
  68. ((sizeof(struct Block)+AROS_WORSTALIGN-1)&~(AROS_WORSTALIGN-1))
  69.  
  70. #endif
  71.